home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
cmln0885.arc
/
CROSS2.LTG
< prev
next >
Wrap
Text File
|
1986-02-27
|
2KB
|
71 lines
crossthoughts Listinτá 2«á
PP╠ routine≤ t∩ recal∞ anΣ storσ element≤ oµ ß two-dimensiona∞ ì
virtua∞ array, usinτ thσ checkerboarΣ method
-- Constants are:
-- Table_Size : Maximum number of pages in RAM.
-- Page_Col_Size : Number of columns in a page.
-- Page_Row_Size : Number of rows in a page
-- ROWS : Number of rows
-- External identifiers are:
-- Table_Type = RECORD RAM_Page, Dirty_bit : integer; END
-- Table : ARRAY[1..Table_Size] of Table_Type
-- SOUGHT_PAGE : integer
-- RAM_Data :
ARRAY[1..(Table_Sizσ ¬ Page_Col_Sizσ ¬ Page_Row_Size)▌ oµ An∙ type
-- Procedure≤ SAV┼ anΣ LOA─ arσ simila≥ t∩ thosσ iε listinτ (1)¼ ì
thσ differencσ beinτ i≤ tha⌠ the∙ incorporatσ wrappinτ anΣ ì
unwrappinτ array≤ t∩ matrice≤ anΣ vicσ versa¼ respectively.
FUNCTIO╬ MATLOC(VM_Row_Index¼ VM_Col_Inde° ║ integer⌐ returε integer
BEGIN
SOUGHT_PAGE_Row = VM_Row_Index div Page_Row_Size + 1
SOUGHT_PAGE_Col = VM_Col_Index div Page_Col_Size + 1
SOUGHT_PAGE = SOUGHT_PAGE_Row + (SOUGHT_PAGE_Col - 1) * ROWS
-- Loop to search for page among RAM resident pages.
INITIALIZE: Found = FALSE
LOOP <Table_Lookup>
BEGIN For i = 1 TO Table_Size
IF SOUGHT_PAGE_Row = Table[i].RAM_Page
THEN Found = True
EXIT <Table_Lookup>
END IF
END LOOP <Table_Lookup>
TERMINATE: None
IF NOT Found
THEN
Page_Swapped = Selected_Page() -- Function to select RAM resident
Page for swapping
IF Table[Page_Swapped].Dirty_bit THEN SAVE_MAT(Page_Swapped) END IF
LOAD_MAT(SOUGHT_PAGE,Page_Swapped)
Table[Page_Swapped].RAM_Page = SOUGHT_PAGE
Table[Page_Swapped].Dirty_bit = 0
SOUGHT_PAGE = Page_Swapped
ELSE
Page_Swapped = Selected_Page() -- Dummy call used to update
-- page replacement history
SOUGHT_PAGE = iè END IF
Page_Row = VM_Row_Index mod Page_Row_Size + 1
Page_Col = VM_Col_Index mod Page_Row_Size + 1
Mat_Size = Page_Row_Size * Page_Col_Size
return {(SOUGHT_PAGE - 1) * Mat_Size + (Page_Col - 1) * Page_Row_Size
+ Page_Row}
END MATLOC
PROCEDURE VM_MAT_Assign(VM_Index : integer; X : Your_data)
BEGIN
RAM_Data[LOC(VM_Row_Index,VM_Col_Index)] = X
Table[SOUGHT_PAGE].Dirty_bit = 1
END VM_MAT_Assign